#ifndef GROUNDWVUDP_H
#define GROUNDWVUDP_H

#include <QObject>
#include <QElapsedTimer>
#include <QThread>
#include <QMutex>
#include <QTimer>
#include <QQueue>

#include "udpbase.h"

class GroundWVUdp : public UdpBase
{
    Q_OBJECT
public:
    explicit GroundWVUdp(int width, int height, QObject *parent = nullptr);

    ~GroundWVUdp();

    void startProcess()override;

    void stopProcess()override;

    void processSlice(const QByteArray& data);  //处理分片数据，组合在一起

    void setTargetFps(int fps)override;  // 设置目标编码帧率（fps）

public slots:
    void onInitUdp()override;

    void onReceive();

    void onSendFrameToEncoder();

private:
    bool m_hasHead = false;

    int m_imgFirstBytes = 0;

    int m_imgAllBytes = 0;

    UdpData m_frame;

    int m_receivedPackets = 0;

    int m_totalPackets = -1;  //一帧图的总分片数

    // 帧率统计变量
    QElapsedTimer m_fpsTimer;
    int m_frameCount = 0;
    double m_currentFps = 0.0;

    // 帧缓冲队列（生产者：UDP接收/重组；消费者：定时器触发发送）
    QQueue<QByteArray> m_frameQueue;
    // 互斥锁：保护队列读写（避免多线程竞争，此处虽单线程，但队列操作需原子性）
    QMutex m_queueMutex;
    // 帧率控制定时器：按目标帧率（如100fps）触发发送
    QTimer m_sendTimer;
    // 目标帧率（可配置，比如100fps → 周期10ms）
    int m_targetFps = 100;
    // 队列最大容量（避免队列无限增长导致内存溢出）
    const int m_maxQueueSize = 100;

};

#endif // GROUNDWVUDP_H
